package com.xm.util;
import com.google.i18n.phonenumbers.PhoneNumberUtil;
import com.google.i18n.phonenumbers.Phonenumber;
import com.google.i18n.phonenumbers.geocoding.PhoneNumberOfflineGeocoder;
import java.util.Locale;

/**
 * 通过手机号定位
 * @author 康文程
 * @date 2023-12-23
 */
public class PositionUtil {
    private static final PhoneNumberUtil PHONE_NUMBER_UTIL = PhoneNumberUtil.getInstance();
    private static final PhoneNumberOfflineGeocoder GEOCODER = PhoneNumberOfflineGeocoder.getInstance();

    /**
     * 根据国家代码和手机号  判断手机号是否有效
     * @param phoneNumber 手机号
     * @param countryCode 国家代码
     * @return 手机号是否有效
     */
    public static boolean checkPhoneNumber(String phoneNumber, String countryCode){

        int ccode = Integer.parseInt(countryCode);
        long phone = Long.parseLong(phoneNumber);

        Phonenumber.PhoneNumber pn = new Phonenumber.PhoneNumber();
        pn.setCountryCode(ccode);
        pn.setNationalNumber(phone);

        return PHONE_NUMBER_UTIL.isValidNumber(pn);

    }

    /**
     * 根据国家代码和手机号  判断手机运营商
     * @param phoneNumber 手机号
     * @param countryCode 国家代码
     * @return 运营商
     */
    public static String getCarrier(String phoneNumber, String countryCode){

        int ccode = Integer.parseInt(countryCode);
        long phone = Long.parseLong(phoneNumber);

        Phonenumber.PhoneNumber pn = new Phonenumber.PhoneNumber();
        pn.setCountryCode(ccode);
        pn.setNationalNumber(phone);
        //返回结果只有英文，自己转成成中文
        String carrierZh = "";
        carrierZh += GEOCODER.getDescriptionForNumber(pn, Locale.CHINESE);

        return carrierZh;
    }


    /**
     * 根据国家代码和手机号  手机归属地
     * @param phoneNumber 手机号
     * @param countryCode 国家代码
     * @return 返回地址
     */
    public static String getAdd(String phoneNumber, String countryCode) {

        int ccode = Integer.parseInt(countryCode);
        long phone = Long.parseLong(phoneNumber);

        Phonenumber.PhoneNumber pn = new Phonenumber.PhoneNumber();
        pn.setCountryCode(ccode);
        pn.setNationalNumber(phone);
        return GEOCODER.getDescriptionForNumber(pn, Locale.CHINA);
    }

    /**
     * 使用方法
     * @param args 数组
     */
    public static void main(String[] args) {
        //手机号是否有效
        boolean isPhone = checkPhoneNumber("18573376671", "+86");
        System.out.println(isPhone);
        //获取运营商位置
        String carrier = getCarrier("18573376671", "+86");
        System.out.println(carrier);
        //获取位置
        String add = getAdd("18573376671", "+86");
        System.out.println(add);
    }
}
